// 导入数据库操作模块
const db = require('../db/index')

// 导入加密模块
const CryptoJS = require('crypto-js'); //此不是node自带模块，需要安装依赖（非常离谱，我说怎么加密不了呢）


const bcrypt = require('bcryptjs');
const { json } = require('express');
//  获取单词
exports.getWord = (req, res) => {
    // console.log(req.query.id)
    // 前端发送单词本的id
    // 后端根据单词本的id找到当前用户的单词的dept_id
    // 再通过dept_id找到所有符合条件的单词
    const sql = `select * from ev_word where dept_id=? and is_delete=0`
    db.query(sql, req.query.id, (err, results) => {
        if (err) return res.cc(err)
        res.send({
            status: 200,
            message: '获取单词数据成功!',
            data: results
        })
    })

}
// 添加单词数据的处理函数
exports.addWords = (req, res) => {

    //添加单词
    const sql = `insert into ev_word set ?`
    db.query(sql, req.body, (err, results) => {
        if (err) return res.cc(err)
        res.cc('添加单词数据成功!', 200)

    })

    /* 
    前端发送的数据

    word 单词
    translation 单词释义
    paraphrase  详细释义
    collection   收藏  1为收藏 0 为未收藏 默认为0未收藏
    dept_id  外键
    */

}

// 删除单词本的处理函数 (优化，标记删除)
exports.deleteWord = (req, res) => {
    const arr = Object.keys(req.query).map(item => req.query[item]).join();

    // const sql = `delete from ev_word where id  in  (${arr}) `
    const sql = `update ev_word set is_delete=1 where id in  (${arr}) `
    db.query(sql, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // SQL 语句执行成功，但是影响行数不等于 1
        // if (results.affectedRows !== 1) return res.cc('删除单词本失败！', 201)
        // 删除单词成功
        res.cc('删除单词成功！', 200)

    })
}
//收藏单词的处理函数
exports.markWords = (req, res) => {
    console.log(req.body.id, '6666666666')
    // 根据单词id修改collection状态
    const sql = `update ev_word set collection = ABS(collection - 1) where id=?`
    db.query(sql, req.body.id, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // SQL 语句执行成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('修改收藏状态失败！', 201)
        // 修改收藏状态成功
        res.cc('修改收藏状态成功！', 200)

    })
}
// 修改单词的处理函数
exports.modifyWord = (req, res) => {
    // 前端发送单词id,单词释义,详细释义
    // 根据id,修改translation和paraphrase的值
    console.log(req.body)
    const sql = `update ev_word set translation=?, paraphrase=? where id=?`
    db.query(sql, [req.body.translation, req.body.paraphrase, req.body.id], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // SQL 语句执行成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('修改单词数据失败！', 201)
        // 修改收藏状态成功
        res.cc('修改单词数据成功！', 200)
    })

}
// 修改视频链接
exports.addLink = (req, res) => {
    // 前端发送单词id,视频链接
    // 根据id,修改video_link的值
    const sql = `update ev_word set video_link=? where id=?`
    db.query(sql, [req.body.video_link, req.body.id], (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // SQL 语句执行成功，但是影响行数不等于 1
        if (results.affectedRows !== 1) return res.cc('修改视频链接失败！', 201)
        // 修改收藏状态成功
        res.cc('修改视频链接成功！', 200)
    })

}


// 密钥和初始向量需要保持安全，可以通过随机生成或使用固定的值



//分享单词功能（前端发送对应单词的id数组，储存到ev_importexport表中）

exports.shareWords = (req, res) => {
    // 密钥和初始向量需要保持安全，可以通过随机生成或使用固定的值


    const sql = `insert into ev_importexport set wordarray=? `
    db.query(sql, req.body.bookArray, (err, results) => {
        if (err) return res.cc(err)
        //把该条的id加密，作为分享密钥来使用  
        const insertedId = results.insertId;
        // 密钥
        const secretKey = 'ydc';
        // 加密
        const encryptedText = CryptoJS.AES.encrypt(String(insertedId), secretKey).toString();
        // 解密
        // const decryptedText = CryptoJS.AES.decrypt(encryptedText, secretKey).toString(CryptoJS.enc.Utf8);
        console.log(encryptedText)

        res.send({
            status: 200,
            message: '返回分享密钥成功!',
            data: encryptedText
        })
    })
}


// exports.shareWords = (req, res) => {
//     const sql = `insert into ev_importexport set wordarray=? `
//     db.query(sql, req.body.bookArray, (err, results) => {
//         if (err) return res.cc(err)
//         const insertedId = results.insertId; //把该行的id加密，作为分享密钥来使用    
//         res.send({
//             status: 200,
//             message: '返回分享密钥成功!',
//             data: results
//         })
//     })

// }

//    console.log(req.body)
// 前端发送新增单词的数据,后端直接添加
// 定义查询 单词名称是否被占用
// const sql = `select * from ev_word where word=?`
// db.query(sql, req.body.word, (err, results) => {
//     if (err) return res.cc(err)
//     //根据影响行数来判断是否被占用
//     if (results.length > 0) {
//         return res.cc('单词名称被占用，请更换其它名称!', 201)
//     }
//     // 添加单词
//     const sql = `insert into ev_word set ?`
//     db.query(sql, req.body, (err, results) => {
//         if (err) return res.cc(err)
//         res.cc('添加单词数据成功!', 200)
//     })
// })




// 获取导入单词功能 (前端发送对应的id，后端返回对应的单词数据给前端)
exports.importWords = (req, res) => {
    console.log(req.body.key, 621312366)
    // 密钥
    const secretKey = 'ydc';
    // 解密
    const decryptedText = CryptoJS.AES.decrypt(req.body.key, secretKey).toString(CryptoJS.enc.Utf8);

    console.log(decryptedText, 'decryptedText')

    // 如果解密失败就返回解密失败
    if (!decryptedText) return res.cc('解密失败，请检查密钥!', 201)
    // 根据解密的id，在ev_importexport寻找对应行的数组

    const sql = ` select * from ev_importexport where id = ?`
    db.query(sql, decryptedText, (err, results) => {
        // 执行 SQL 语句失败
        if (err) return res.cc(err)
        // 成功获取数组后，利用数组里的单词id返回对应的数据(返回的类型为字符串)
        //   去除两端中括号
        const idString = results[0].wordarray.replace(/\[|]/g, '')
        console.log(idString, 'idString')
        const sql2 = `select  word,translation,paraphrase from ev_word where id in (${idString})`
        db.query(sql2, (err, results2) => {
            if (err) return res.cc(err)
            res.send({
                status: 200,
                message: '获取导入单词数据成功!',
                data: results2
            })
        })



    })
}
// 导入获取的单词功能
exports.importWordsOut = (req, res) => {
    // console.log(req.body, 5444555)
    // 前端发送新增单词的数据,后端直接批量添加


    let text = ''
    JSON.parse(req.body.data).forEach(e => {
        text += `('${e['word']}','${e['translation']}','${e['paraphrase']}',${req.body.dept_id}),`
    });
    const sql = `insert into ev_word (word,translation,paraphrase,dept_id) values ${text.slice(0, text.length - 1)}`
    db.query(sql, req.body, (err, results) => {
        if (err) return res.cc(err)
        res.cc('添加单词数据成功!', 200)

    })

    // 把[{ word: 'qwe', translation: 'wqe', paraphrase: 'wqe' },
    //     { word: '213', translation: '213', paraphrase: '23' }]
    //     ('张三', 18, '男'),
    //     ('赵四', 17, '女'),


}

// 搜索单词功能
exports.searchWords = (req, res) => {
    // 所有单词模糊匹配
    console.log(JSON.parse(req.query.bookIds))
    let text = ''
    JSON.parse(req.query.bookIds).forEach((e, index) => {
        if (index == 0) {
            text = `dept_id=${e}`
        } else {
            text += ` or dept_id=${e}`
        }
    })
    const sql = `select * from ev_word where (${text})  and word like '%${req.query.word}%' `
    db.query(sql, req.body, (err, results) => {
        if (err) return res.cc(err)
        res.send({
            status: 200,
            message: '查询单词数据成功!',
            data: results
        })

    })
}

